package com.example.shop.common;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

import org.springframework.core.annotation.Order;

import java.io.IOException;

/**
 *	<p>创建可重复读request流原理：这个自定义的类CustomRequestWrapper会将HttpServletRequest包装成一个可重复读的请求体流。在这个类内部，首先从原始的HttpServletRequest中获取到请求体内容，然后将其保存在一个成员变量requestBody中。
 *	通过重写getInputStream()方法，可以将requestBody的内容转换成一个新的ServletInputStream对象。该ServletInputStream对象在每次读取时都从requestBody中读取数据，实现了对请求体内容的多次读取操作。
 *	这样，在后续的处理过程中，通过使用CustomRequestWrapper传递给后续的Filter或Servlet，就可以多次读取请求体内容，而不会受到原始HttpServletRequest中请求体只能读取一次的限制。
 * 	</p>
 * @author Administrator
 */
//@WebFilter(urlPatterns = "/*")
public class CustomFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        RepeatedlyReadRequestWrapper requestWrapper = new RepeatedlyReadRequestWrapper(request);
        filterChain.doFilter(requestWrapper, servletResponse);
    }

    @Override
    public void destroy() {

    }
}
